package com.itcam.kuangstudy.annotation_;

/**
 * Author:Cammy.Wu
 * Date:2024-05-13
 * Description:自定义注解
 */

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @interface用来声明一个注解，格式:public @interface 注解名
 * 其中的每一个地方实际上是声明了一个配置参数
 * 方法的名称就是参数的名称
 * 返回值类型就是参数的类型
 * 可以通过default来声明参数的默认值
 * 如果只有一个参数成员，一般参数名为value
 * 注解元素必须要有值，我们定义注解元素时，经常使用空字符串或者0作为默认值
 */

// 自定义注解
public class Test03 {
    // 注解可以显示赋值，如果没有默认值，我们就必须给注解赋值
    @MyAnnotation2(name = "Cammy",age = 24)
    public void test1() {

    }

    @MyAnnotation3("Cammy")
    public void test2() {

    }
}

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation2 {
    // 注解的参数 ： 参数类型 + 参数名（）;
    String name() default "";

    int age() default 0;

    int id() default -1; // 如果默认值为-1，代表不存在

    String[] schools() default {"西西里负压大学", "倾云岭大学"};
}

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation3{
    String value();
}
